package br.com.jmmarca.modelo.dao;

import java.util.List;

import br.com.jmmarca.modelo.entidade.Cidade;
import br.com.jmmarca.modelo.entidade.Grupo;
import br.com.jmmarca.modelo.entidade.Parametro;
import br.com.jmmarca.modelo.generic.AbstractDAO;

public class ParametroDAO extends AbstractDAO<Parametro> {

    private static ParametroDAO instance;

    public List<Parametro> encontrarPessoaPorCodigoESequencia(String codigo, String sequencia) {
        String codigoEsequencia = codigo+"-"+sequencia;
        try {
            return (List<Parametro>) getEntityManager().createQuery("Select c from Parametro c where c.pessoa is not null and c.nome = 'codigo' and c.valor = :codigo").setParameter("codigo", codigoEsequencia).getResultList();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    private ParametroDAO() {
        super(Parametro.class);
    }

    public static ParametroDAO getInstance() {
        if (instance == null) {
            instance = new ParametroDAO();
        }
        return instance;
    }

    public Parametro encontrarGrupoPagina(Grupo subgrupo) {
        List<Parametro> listaParametros = (List<Parametro>) getEntityManager().createQuery("Select c from Parametro c where c.grupo = :grupo and c.nome = 'pagina'").setParameter("grupo", subgrupo).getResultList();
        if(listaParametros != null && !listaParametros.isEmpty()){
            return listaParametros.get(0);
        }
        return null;
    }
    
    public Parametro encontrarGrupoPaginaPorCidade(Grupo subgrupo, Cidade cidade) {
    	List<Parametro> listaParametros = (List<Parametro>) getEntityManager().createQuery("Select c from Parametro c where c.grupo.id = :grupo and c.nome = 'pagina' and c.cidade.id = :cidade")
    			.setParameter("grupo", subgrupo.getId())
    			.setParameter("cidade", cidade.getId())
    			.getResultList();
    	if(listaParametros != null && !listaParametros.isEmpty()){
    		return listaParametros.get(0);
    	}
    	return null;
    }

    public Parametro encontrarGrupoFinalizado(Grupo subgrupo) {
        List<Parametro> listaParametros = (List<Parametro>) getEntityManager().createQuery("Select c from Parametro c where c.grupo.id = :grupo and c.nome = 'finalizado' and c.valor = '1'").setParameter("grupo", subgrupo.getId()).getResultList();
        if(listaParametros != null && !listaParametros.isEmpty()){
            return listaParametros.get(0);
        }
        return null;   
    }
    public Parametro encontrarGrupoFinalizado(Grupo subgrupo, Cidade cidade) {
    	List<Parametro> listaParametros = (List<Parametro>) getEntityManager().createQuery("Select c from Parametro c where c.grupo.id = :grupo and c.nome = 'finalizado' and c.valor = '1' and c.cidade.id = :cidade")
    			.setParameter("grupo", subgrupo.getId())
    			.setParameter("cidade", cidade.getId())
    			.getResultList();
    	if(listaParametros != null && !listaParametros.isEmpty()){
    		return listaParametros.get(0);
    	}
    	return null;   
    }
}
